// Resource Strings (资源字符串) 示例
program ResourceStringsExample;

{$mode objfpc}{$H+}

// 声明资源字符串
resourcestring
  rsWelcome = '欢迎使用 Pascal 资源字符串示例';
  rsGoodbye = '再见！';
  rsAppName = '资源字符串演示程序';
  rsVersion = '版本 1.0';
  rsError = '发生错误: %s';
  rsConfirmation = '您确定要执行此操作吗？';

// 常量字符串用于对比
const
  ConstWelcome = '欢迎使用 Pascal 常量字符串';

type
  TLanguage = (langChinese, langEnglish, langJapanese);

// 模拟不同语言的资源字符串
procedure SetLanguage(ALang: TLanguage);
begin
  case ALang of
    langChinese:
      begin
        rsWelcome := '欢迎使用 Pascal 资源字符串示例';
        rsGoodbye := '再见！';
        rsAppName := '资源字符串演示程序';
        rsVersion := '版本 1.0';
        rsError := '发生错误: %s';
        rsConfirmation := '您确定要执行此操作吗？';
      end;
      
    langEnglish:
      begin
        rsWelcome := 'Welcome to Pascal Resource Strings Example';
        rsGoodbye := 'Goodbye!';
        rsAppName := 'Resource Strings Demo Program';
        rsVersion := 'Version 1.0';
        rsError := 'An error occurred: %s';
        rsConfirmation := 'Are you sure you want to perform this action?';
      end;
      
    langJapanese:
      begin
        rsWelcome := 'Pascal リソース文字列の例へようこそ';
        rsGoodbye := 'さようなら！';
        rsAppName := 'リソース文字列デモプログラム';
        rsVersion := 'バージョン 1.0';
        rsError := 'エラーが発生しました: %s';
        rsConfirmation := 'この操作を実行してもよろしいですか？';
      end;
  end;
end;

// 显示应用程序信息
procedure ShowAppInfo;
begin
  WriteLn(rsWelcome);
  WriteLn('应用程序名称: ', rsAppName);
  WriteLn('程序版本: ', rsVersion);
  WriteLn;
end;

// 显示错误信息
procedure ShowError(const AError: string);
begin
  WriteLn(Format(rsError, [AError]));
end;

// 显示确认信息
function ShowConfirmation: Boolean;
begin
  WriteLn(rsConfirmation);
  WriteLn('请输入 Y/y 确认，其他键取消:');
  Result := UpCase(ReadKey) in ['Y'];
  WriteLn;
end;

var
  UserChoice: Char;

begin
  WriteLn('=== Pascal 资源字符串示例 ===');
  WriteLn;
  
  // 显示默认语言（中文）
  WriteLn('1. 中文界面:');
  ShowAppInfo;
  ShowError('文件未找到');
  if ShowConfirmation then
    WriteLn('操作已确认')
  else
    WriteLn('操作已取消');
  WriteLn;
  
  // 切换到英文界面
  WriteLn('2. 英文界面:');
  SetLanguage(langEnglish);
  ShowAppInfo;
  ShowError('File not found');
  if ShowConfirmation then
    WriteLn('Operation confirmed')
  else
    WriteLn('Operation cancelled');
  WriteLn;
  
  // 切换到日文界面
  WriteLn('3. 日文界面:');
  SetLanguage(langJapanese);
  ShowAppInfo;
  ShowError('ファイルが見つかりません');
  if ShowConfirmation then
    WriteLn('操作が確認されました')
  else
    WriteLn('操作はキャンセルされました');
  WriteLn;
  
  // 恢复到中文界面并结束
  SetLanguage(langChinese);
  WriteLn(rsGoodbye);
  ReadLn;
end.